package org.jsshbroadcast.ui.terminal;

import org.jsshbroadcast.Controladora;
import org.jsshbroadcast.ui.IUsuario;
import org.jsshbroadcast.ui.terminal.CampoSenha;
import org.jsshbroadcast.jsbException.InterfaceException;
import java.io.IOException;
import java.util.ArrayList;

/**
 *
 * @author Eduardo Folly
 */
public class InterfaceTerminal implements IUsuario {

    private int progressoMax;
    private int progresso;
    private ArrayList param;

    public InterfaceTerminal(ArrayList p) {
        param = p;
    }

    public void execute() {
        try {
            Controladora controle = new Controladora();
            int pos = -1;

            pos = param.indexOf("--help");
            if (pos >= 0) {
                this.MostraAjuda();
                System.exit(0);
            }

            IUsuario iu = this;
            String usuario = new String("");
            String senha = new String("");
            String xml = new String("");
            String comando = new String("");

            pos = param.indexOf("--user");
            if (pos >= 0) {
                usuario = (String) param.get(pos + 1);
            }

            senha = this.getSenha("Padrão");

            pos = param.indexOf("--xml");
            if (pos >= 0) {
                xml = (String) param.get(pos + 1);
            }

            pos = param.indexOf("--command");
            if (pos >= 0) {
                comando = (String) param.get(pos + 1);
            }

            controle.executar(iu, usuario, senha, comando, xml);

        } catch (InterfaceException e) {
            System.out.println(e.getMessage());
            System.exit(1);

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    public void IniciaProgresso() {

    }

    public void FinalizaProgresso() {
        System.exit(0);
    }

    public int getProgressoAtual() {
        return progresso;
    }

    public int getProgressoMaximo() {
        return progressoMax;
    }

    public void setProgressoMaximo(int valor) {
        progressoMax = valor;
    }

    public void setIncrementaProgresso(int valor) {
        progresso += valor;
    }

    public String getSenha(String strserver) {
        char password[] = null;
        try {
            password = CampoSenha.getPassword(System.in, "Senha para " + strserver);
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
        if (password != null) {
            return String.valueOf(password);
        }
        return null;
    }

    public void MostraMensagem(String mensagem) {
        System.out.println(mensagem);
        System.out.println("");
    }

    public void MostraAjuda() {
        System.out.println("");
        System.out.println("\tJSSHBroadcast - http://code.google.com/p/jsshbroadcast/");
        System.out.println("");
        System.out.println("Leia as instruções contidas dentro do arquivo local.xml.");
        System.out.println("");
        System.out.println("\t--help\t\tMostra a tela de ajuda.");
        System.out.println("\t--terminal\tUtiliza a aplicação em modo texto.");
        System.out.println("\t--user\t\tInforma o nome do usuário para as conexões.");
        System.out.println("\t--xml\t\tInforma o arquivo XML com o registro dos servidores.");
        System.out.println("\t--command\tInforma o comando que deverá ser executado.");
        System.out.println("\t\t\tCaso este comando possua parametros ele deverá ser colocado entre aspas.");
        System.out.println("");
        System.out.println("");
        System.out.println("\tExemplos:");
        System.out.println("");
        System.out.println("\t./JSSHBroadcast --terminal --user root --xml servidores.xml --command df");
        System.out.println("");
        System.out.println("\t./JSSHBroadcast --terminal --user root --xml servidores.xml --command \"apt-get dist-upgrade --assume-yes\"");
        System.out.println("");
    }
}